/*
  学习目标：泛型函数-多泛型变量间约束
*/

// 变量间添加约束条件 - key属于obj的键
function getValueByKey<T, K extends keyof T>(obj: T, key: K) {
  // 1. 捕获两个参数的类型

  // 2. 给两个泛型, 添加约束条件:  key必须属于obj的键
  return obj[key];
}

// 期望：为函数添加类型，
// 效果：第二个参数能限定取值范围
const res1 = getValueByKey({ name1: 'zs', age1: 18 }, 'age1'); // 期望约束第二个参数：取出参数1中的键名
const res2 = getValueByKey({ name2: 'zs', age2: 18 }, 'name2'); // 期望约束第二个参数：取出参数1中的键名
const res3 = getValueByKey({ xsdfs: 'zs', asdfasfas: 18 }, 'asdfasfas'); // 期望约束第二个参数：取出参数1中的键名
const res4 = getValueByKey({ sdafasfas: 'zs', asfdas: 18 }, 'asfdas'); // 期望约束第二个参数：取出参数1中的键名
